package com.education.platform.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.servers.Server;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;

/**
 * Knife4j配置类
 * 
 * @author education-platform
 * @since 2024-09-27
 */
@Configuration
public class Knife4jConfig {

    /**
     * 自定义OpenAPI信息
     */
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("家教平台API文档")
                        .version("1.0.0")
                        .description("大学生家教平台后端API接口文档")
                        .contact(new Contact()
                                .name("开发团队")
                                .email("dev@education-platform.com")
                                .url("https://github.com/education-platform"))
                        .license(new License()
                                .name("MIT License")
                                .url("https://opensource.org/licenses/MIT")))
                .servers(List.of(
                        new Server().url("http://localhost:8080").description("本地开发环境"),
                        new Server().url("https://api.education-platform.com").description("生产环境")
                ));
    }

    /**
     * 用户认证相关API分组
     */
    @Bean
    public GroupedOpenApi authApi() {
        return GroupedOpenApi.builder()
                .group("01-用户认证")
                .pathsToMatch("/api/auth/**")
                .build();
    }

    /**
     * 用户管理相关API分组
     */
    @Bean
    public GroupedOpenApi userApi() {
        return GroupedOpenApi.builder()
                .group("02-用户管理")
                .pathsToMatch("/api/user/**")
                .build();
    }

    /**
     * 教员管理相关API分组
     */
    @Bean
    public GroupedOpenApi teacherApi() {
        return GroupedOpenApi.builder()
                .group("03-教员管理")
                .pathsToMatch("/api/teacher/**")
                .build();
    }

    /**
     * 需求管理相关API分组
     */
    @Bean
    public GroupedOpenApi demandApi() {
        return GroupedOpenApi.builder()
                .group("04-需求管理")
                .pathsToMatch("/api/demand/**")
                .build();
    }

    /**
     * 订单管理相关API分组
     */
    @Bean
    public GroupedOpenApi orderApi() {
        return GroupedOpenApi.builder()
                .group("05-订单管理")
                .pathsToMatch("/api/order/**")
                .build();
    }

    /**
     * 支付管理相关API分组
     */
    @Bean
    public GroupedOpenApi paymentApi() {
        return GroupedOpenApi.builder()
                .group("06-支付管理")
                .pathsToMatch("/api/payment/**")
                .build();
    }

    /**
     * 消息管理相关API分组
     */
    @Bean
    public GroupedOpenApi messageApi() {
        return GroupedOpenApi.builder()
                .group("07-消息管理")
                .pathsToMatch("/api/message/**")
                .build();
    }

    /**
     * 文件管理相关API分组
     */
    @Bean
    public GroupedOpenApi fileApi() {
        return GroupedOpenApi.builder()
                .group("08-文件管理")
                .pathsToMatch("/api/file/**")
                .build();
    }

    /**
     * 系统管理相关API分组
     */
    @Bean
    public GroupedOpenApi systemApi() {
        return GroupedOpenApi.builder()
                .group("09-系统管理")
                .pathsToMatch("/api/system/**", "/api/admin/**")
                .build();
    }

    /**
     * 所有API分组
     */
    @Bean
    public GroupedOpenApi allApi() {
        return GroupedOpenApi.builder()
                .group("00-全部接口")
                .pathsToMatch("/api/**")
                .build();
    }
} 